МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
кафедра „ЗАХИСТ ІНФОРМАЦІЇ”
ЗВІТ
до лабораторної роботи № 7
З КУРСУ “АЛГОРИТМІЧНІ МОВИ І ПРОГРАМУВАННЯ”
на тему:
„РОБОТА З ТЕКСТОВИМИ ФАЙЛАМИ.
СИМВОЛЬНІ ТА РЯДКОВІ ЗМІННІ”
Варіант № 20
Мета роботи – навчитися працювати з файлами та з розробленими процедурами мови Сі для роботи з стрічками, вивчити синтаксис опису функцій для роботи з файлами та стрічками.
2. ПОВНИЙ ТЕКС ЗАВДАННЯ
Знайти кількість приголосних літер в кожному рядку заданого файлу. Вивести на екран рядки файлу в порядку збільшення кількості приголосних літер в цих рядках. Сформувати та вивести на екран текстовий файл, в якому замінити символи “;” словами “END_LINE”. Пошук символу “;” оформити у вигляді підпрограми.
Програму написати з використанням розроблених процедур та функцій для роботи зі стрічками.
3. ОСТАТОЧНА ВЕРСІЯ БЛОК-СХЕМИ АЛГОРИТМУ
Блок-схема функції IsProcedure(s)
4. СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ПРОЦЕДУР І ФУНКЦІЙ, ВИКОРИСТАНИХ У ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
in, out – покажчики на тип FILE за допомогою яких отримуємо доступ до файлів на диску;
tmp, buf – масиви символів;
lines – масив користувацької структури;
i, j – змінні типу int для зберігання введених даних та результату роботи програми;
clrscr() – функція очистки екрана яка об’явлена в модулі conio.h;
getch() – функція яка чекає натискання будь-якої клавіші;
printf() – функція виведення текстових повідомлень і значень змінних на екран;
fopen(fPath,s) – функція яка відкриває файл fPath у режимі s (fPath i s – стрічки) та повертає покажчик на тип FILE тим самим зв’язуючи цей покажчик з файлом на диску;
fclose(file) – функція, яка закриває файл зв’язаний з покажчиком file;
fgets(buf, n, file) – функція, яка закриває зчитує з файла file рядок символів у масив buf, де n – розмір масиву buf;
fputs(s, file) – функція, яка записує у файл file рядок s;
strcat(s1, s2) – функція, яка дописує до рядка s1 рядок s2;
strstr(s1, s2) – функція, яка повертає покажчик на перший символ входження рядка s2 в рядок s1. Якщо рядок s1 не містить рядка s2 то функція повертає NULL;
Користувацькі функції
rEnd_Line(s) – функція яка замінює символи “;” на слово “END_LINE” в рядку s;
SortLines() – впорядковує рядки шляхом заміни покажчиків на ці рядки в масиві структури;
nPrugol(s) – повертає кількість приголосних букв у стрічці s;
5. ОСТАТОЧНА ВЕРСІЯ ПРОГРАМИ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define IN "Lab3_v20.pas"
#define OUT "Out.txt"
#define MAX 256
struct
{
char *s;
int n;
} lines[MAX];
int nStr=0;
//=======================================================
void rEnd_Line(char *s)
{
char buf[MAX]; buf[0]=0;
char *tmp,*p=s;
while (tmp=strstr(p,";"))
{
*tmp=0;
strcat(buf,p); strcat(buf,"END_LINE");
p=tmp+1;
}
strcat(buf,p); strcpy(s,buf);
}
//=======================================================
void SortLines()
{
int i=1,j;
for (i=1;i<nStr;i++)
for (j=nStr-1;j>=i;j--)
if (lines[j-1].n>lines[j].n)
{
char *p=lines[j-1].s; lines[j-1].s=lines[j].s; lines[j].s=p;
int t = lines[j-1].n; lines[j-1].n=lines[j].n; lines[j].n=t;
}
}
//=======================================================
int nPrugol(char *s)
{
const int n=10; int np=0;
char szGol[]="AaEeIiOoYy";
while (*s)
{
if (*s>='A' && *s<='Z' || *s>='a' && *s<='z')
{
np++;
for (int j=0; j<n; j++)
if (*s==szGol[j]) np--;
} s++;
}
return np;
}
//=======================================================
void main(void)
{
FILE *in,*out;
char tmp[MAX];
in=fopen(IN,"r"); out=fopen(OUT,"w");
while (1)
{
if (fgets(tmp,MAX,in)==NULL) break;
lines[nStr].s=(char*)malloc(strlen(tmp));
strcpy(lines[nStr].s,tmp);
lines[nStr].n=nPrugol(tmp);
nStr++;
rEnd_Line(tmp);
fputs(tmp,out);
} fclose(in); fclose(out);
SortLines();
for (int j=0;j<nStr;j++) printf("%s",lines[j].s);
printf("\n\n\n=====\tOut.txt\t=====\...